#ifndef	_BSP_METER_H
#define _BSP_METER_H


#include "bsp_rs485.h"


#define  METER_COMBINATION_ENERGY  	0x00FF0000 




#define METER_MSG_SN 			0x1414		 				// 地址标识 
#define ENCRYPTION_CODE 	0x33			 				// 加密标识，发送数据域的计算需要加上加密码，接收的数据域需要减去加密码
#define METER_Send				RS485_Send_Data		// 定义发送函数 


// 不用联合的原因是BCD码
typedef struct{
	uint64_t sn;
	uint8_t SN_ARRAY[6];
}METER_SN_t;


// 组合电能
typedef struct{
	float	energy;								// 有功电能
	float reactive1;						// 无功1电能
	float reactive2;						// 无功2电能
}METER_COMBINATION_ENERGY_t;


// 电压
typedef struct{
	float	voltage;						// 
	float	voltageA;						// 
	float voltageB;						// 
	float voltageC;						// 
}METER_VOLTAGE_t;

// 电流
typedef struct {
	float	current;						// 
	float	currentA;						// 
	float currentB;						// 
	float currentC;						// 
}METER_CURRENT_t;

// 水表相关资源
typedef struct {
	uint32_t request_type;													// 请求的类型，根据这个来最后解析结果获取
	METER_SN_t SN;																	// 对应水表的S/N号,一般在初始化的时候直接获取，以后更改设备的时候就不需要修改代码
	METER_COMBINATION_ENERGY_t CombinationEnergy;	// 组合电能kWh
	uint8_t  err;																		// 错误信息字
	METER_VOLTAGE_t voltage;												// 电压
	METER_CURRENT_t current;												// 电流
}METER_t;



extern METER_t meter;



int8_t METER_Init(void);
void METER_GetAddr(void);
uint8_t METER_Handle(uint8_t *buff, uint16_t len);
int8_t METER_GetComEnergy(int8_t num);


#endif

